QuickSight の制限付き共有フォルダを作成する CLI コマンドが長いので CLI スケルトンを使って見やすくする
コーヒーが好きな emi です。
QuickSight にはアセットを別のユーザーに共有する際に「共有フォルダ」というものを利用できます。アセットとは、データソース、データセット、分析、ダッシュボード等の QuickSight リソースの総称です。
共有フォルダへのアクセス権限を設定することにより、一部のユーザーやグループにアセットの閲覧・操作を許可できます。
特に共有フォルダの中でも「制限付き共有フォルダ」という、より強い制限と分離が可能なものがあるのですが、こちらは QuickSight コンソールから作成することはできず、API でのみ作成できるリソースとなっています。
AWS CLI で API 実行し作成するのが手軽で良いのですが、制限付き共有フォルダを作成する create-folde コマンドや権限の設定をおこなう update-folder-permissions コマンドは、そのまま設定値を入れ込むととても横に長くなります。
既に以下のブログで制限付き共有フォルダを CLI スケルトンを使って作成しているのですが、私が改めて理解するために記事にします。
以降の AWS CLI コマンドの実行は CloudShell を使っています。
CLI スケルトンを使わずシンプルに制限付き共有フォルダーを作成する場合
まずは CLI スケルトンを使わずシンプルにパラメーターを指定して制限付き共有フォルダーを作成する場合を紹介します。
以下のコマンドリファレンスに従い、パラメーターを入力します。
create-folder — AWS CLI 2.17.51 Command Reference
aws quicksight create-folder \
--aws-account-id 123456789012 \
--folder-id Sharedrestrictedfolder \
--name "Shared restricted folder" \
--folder-type RESTRICTED \
--permissions Principal=arn:aws:quicksight:ap-northeast-1:123456789012:user/default/AWSReservedSSO_QuickSightFullAccess_af51xxxxxxxxxx/DataAnalysisUser1,Actions=quicksight:CreateFolder,quicksight:DescribeFolder,quicksight:CreateFolderMembership,quicksight:DeleteFolderMembership,quicksight:DescribeFolderPermissions
--folder-id Sharedrestrictedfolder
- 任意のフォルダー ID を入力
--name "Shared restricted folder"
- 任意のフォルダー名を入力
- ここで入力したフォルダー名が QuickSight コンソール上で表示される
- 日本語も可能
--folder-type RESTRICTED
RESTRICTED
もしくはSHARED
- 制限付き共有フォルダの場合は
RESTRICTED
を入力
--permissions
- 制限付き共有フォルダに付与する権限を設定
Principal
や Actions
の確認方法はこのブログの後半で解説します。
▼実行結果(成功)
[cloudshell-user@ip-10-130-35-41 ~]$ aws quicksight create-folder \
> --aws-account-id 123456789012 \
> --folder-id Sharedrestrictedfolder \
> --name "Shared restricted folder" \
> --folder-type RESTRICTED \
> --permissions Principal=arn:aws:quicksight:ap-northeast-1:123456789012:user/default/AWSReservedSSO_QuickSightFullAccess_af51xxxxxxxxxx/DataAnalysisUser1,Actions=quicksight:CreateFolder,quicksight:DescribeFolder,quicksight:CreateFolderMembership,quicksight:DeleteFolderMembership,quicksight:DescribeFolderPermissions
{
"Status": 200,
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:folder/Sharedrestrictedfolder",
"FolderId": "Sharedrestrictedfolder",
"RequestId": "55e53ac6-90d9-4ba7-ab10-3feb0e401b16"
}
[cloudshell-user@ip-10-130-35-41 ~]$
このようにコマンドは成功するのですが、特に --permissions
が横に長くてコマンドがちょっと見づらいですね。
CLI スケルトンを使って JSON 形式でパラメーター設定する
では、CLI スケルトンを使って JSON 形式でパラメーター設定していきます。
CLI スケルトンについては以下のブログも参照ください。
まず --generate-cli-skeleton
パラメーターを指定して、JSON のひな形を表示します。
aws quicksight create-folder --generate-cli-skeleton
▼実行結果
[cloudshell-user@ip-10-132-69-169 ~]$ aws quicksight create-folder --generate-cli-skeleton
{
"AwsAccountId": "",
"FolderId": "",
"Name": "",
"FolderType": "SHARED",
"ParentFolderArn": "",
"Permissions": [
{
"Principal": "",
"Actions": [
""
]
}
],
"Tags": [
{
"Key": "",
"Value": ""
}
],
"SharingModel": "ACCOUNT"
}
[cloudshell-user@ip-10-132-69-169 ~]$
JSON のひな形が表示されました。
これを JSON ファイルとして保存します。ファイル名は何でもよいですが、今回は create-Restricted-shared-folders.json
としました。
aws quicksight create-folder --generate-cli-skeleton > create-Restricted-shared-folders.json
▼実行結果
[cloudshell-user@ip-10-132-69-169 ~]$ aws quicksight create-folder --generate-cli-skeleton > create-Restricted-shared-folders.json
[cloudshell-user@ip-10-132-69-169 ~]$
ls
と cat
コマンドで、ちゃんとファイルが作成されているか確認します。
[cloudshell-user@ip-10-132-69-169 ~]$ ls
create-Restricted-shared-folders.json
[cloudshell-user@ip-10-132-69-169 ~]$ cat create-Restricted-shared-folders.json
{
"AwsAccountId": "",
"FolderId": "",
"Name": "",
"FolderType": "SHARED",
"ParentFolderArn": "",
"Permissions": [
{
"Principal": "",
"Actions": [
""
]
}
],
"Tags": [
{
"Key": "",
"Value": ""
}
],
"SharingModel": "ACCOUNT"
}
[cloudshell-user@ip-10-132-69-169 ~]$
保存されています。
このファイルをもとに、必要なパラメーターを埋めていきます。
JSON のひな形には --sharing-model(string)
や --parent-folder-arn(string)
などのパラメーターも記載されていますが、今回は使用しません。
以下のように中身を書き直します。手元にメモしておいてください。
{
"AwsAccountId": "123456789012",
"FolderId": "Sharedrestrictedfolder2",
"Name": "Shared restricted folder2",
"FolderType": "RESTRICTED",
"Permissions": [
{
"Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/AWSReservedSSO_QuickSightFullAccess_af51xxxxxxxxxx/DataAnalysisUser1",
"Actions": [
"quicksight:CreateFolder",
"quicksight:DescribeFolder",
"quicksight:CreateFolderMembership",
"quicksight:DeleteFolderMembership",
"quicksight:DescribeFolderPermissions"
]
}
]
}
先ほどの横に長いコマンドと見比べると、JSON 形式の方が全体が見やすいですね。
繰り返しますが Principal
や Actions
の確認方法はこのブログの後半で解説します。
では、先ほど作成した create-Restricted-shared-folders.json
ファイルを vim などで開いて編集します。
vim create-Restricted-shared-folders.json
以下のようにファイルが開きます。
まずは中身を全部削除します。
:%d
と入力して Enter キーを押すと、全行が削除されます。
続いて :set paste
と入力して Enter キーを押すと、貼り付けモードになります。Enter キーを押すと、カーソルが上にきます。
i
を押下して編集モードに移行します。i
を押下すると画面下部に --INSERT (paste)--
と表示されます。
先ほどの JSON 形式のパラメーターを貼り付けます。
esc
キーを押下して編集モードを抜けます。
:wq
と入力して Enter キーを押すと、保存して終了します。
以下のように CloudShell の画面に戻ります。
cat
コマンドで、ちゃんとファイルが作成されているか確認します。
[cloudshell-user@ip-10-132-69-169 ~]$ cat create-Restricted-shared-folders.json
{
"AwsAccountId": "123456789012",
"FolderId": "Sharedrestrictedfolder2",
"Name": "Shared restricted folder2",
"FolderType": "RESTRICTED",
"Permissions": [
{
"Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/AWSReservedSSO_QuickSightFullAccess_af51xxxxxxxxxx/DataAnalysisUser1",
"Actions": [
"quicksight:CreateFolder",
"quicksight:DescribeFolder",
"quicksight:CreateFolderMembership",
"quicksight:DeleteFolderMembership",
"quicksight:DescribeFolderPermissions"
]
}
]
}
[cloudshell-user@ip-10-132-69-169 ~]$
保存されています。
では、作成した JSON ファイル create-Restricted-shared-folders.json
を使って制限付き共有フォルダを作成します。
aws quicksight create-folder \
--cli-input-json file://create-Restricted-shared-folders.json
--cli-input-json
パラメーターで作成した JSON ファイルを指定します。
▼実行結果
[cloudshell-user@ip-10-132-69-169 ~]$ aws quicksight create-folder \
> --cli-input-json file://create-Restricted-shared-folders.json
{
"Status": 200,
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:folder/Sharedrestrictedfolder2",
"FolderId": "Sharedrestrictedfolder2",
"RequestId": "f953aa06-7a3b-48cf-8d0c-332c37a5b7d9"
}
[cloudshell-user@ip-10-132-69-169 ~]$
"Status": 200,
が返ってくれば成功です。
QuickSight コンソールを開いて確認してみましょう。
作成した制限付き共有フォルダが表示されていることを確認できました。
権限も、指定した権限「寄稿者」となっています。
以上で、CLI スケルトンを使って JSON 形式でパラメーターを設定し制限付き共有フォルダを作成する方法を紹介しました。
以降は、Principal の ARN や Actions の設定値について解説します。
Principal の ARN 確認方法
個別 QuickSight ユーザーに権限を付与する場合
以下コマンドで QuickSight ユーザー一覧を確認します。
list-users — AWS CLI 2.17.51 Command Reference
まずはそのまま実行してみます。
aws quicksight list-users
▼実行結果
[cloudshell-user@ip-10-130-58-177 ~]$ aws quicksight list-users
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
aws help
aws <command> help
aws <command> <subcommand> help
aws: error: the following arguments are required: --aws-account-id, --namespace
[cloudshell-user@ip-10-130-58-177 ~]$
--aws-account-id
と --namespace
が必須パラメーターであることが分かりました。この二つのパラメーターも指定しましょう。
aws quicksight list-users --aws-account-id 123456789012 --namespace default
▼実行結果
[cloudshell-user@ip-10-130-58-177 ~]$ aws quicksight list-users --aws-account-id 123456789012 --namespace default
{
"UserList": [
{
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/AWSReservedSSO_AWSAdministratorAccess_4b32xxxxxxxxxx/KitaniEmi",
"UserName": "AWSReservedSSO_AWSAdministratorAccess_4b32xxxxxxxxxx/KitaniEmi",
"Email": "xxx@xxx",
"Role": "ADMIN",
"IdentityType": "IAM",
"Active": true,
"PrincipalId": "federated/iam/AROAXXXXXXXXXX:KitaniEmi"
},
{
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/AWSReservedSSO_QuickSightFullAccess_af51xxxxxxxxxx/DataAnalysisUser1",
"UserName": "AWSReservedSSO_QuickSightFullAccess_af51xxxxxxxxxx/DataAnalysisUser1",
"Email": "yyy@yyy",
"Role": "ADMIN",
"IdentityType": "IAM",
"Active": true,
"PrincipalId": "federated/iam/AROAXXXXXXXXXX:DataAnalysisUser1"
},
{
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/AWSReservedSSO_AWSPowerUserAccess_e0b5xxxxxxxxxx/KitaniEmi",
"UserName": "AWSReservedSSO_AWSPowerUserAccess_e0b5xxxxxxxxxx/KitaniEmi",
"Email": "zzz@zzz",
"Role": "ADMIN",
"IdentityType": "IAM",
"Active": true,
"PrincipalId": "federated/iam/AROAXXXXXXXXXX:KitaniEmi"
}
],
"Status": 200,
"RequestId": "36224ed8-9c1d-46b0-a2a9-5bd44af5c551"
}
[cloudshell-user@ip-10-130-58-177 ~]$
QuickSight ユーザー一覧が表示されました。この "Arn"
の部分が、QuickSight ユーザーの ARN です。
ちなみに今回私は Control Tower 環境の IAM Identity Center ユーザーで AWS アカウントにログインし、許可セットの権限で QuickSight ユーザーを作成しているために、QuickSight ユーザー名が AWSReservedSSO_~~~
から始まる長い名前になっています。
QuickSight のグループに権限を付与する場合
以下コマンドで QuickSight グループ一覧を確認します。
list-groups — AWS CLI 2.17.51 Command Reference
まずはそのまま実行してみます。
aws quicksight list-groups
▼実行結果
[cloudshell-user@ip-10-130-58-177 ~]$ aws quicksight list-groups
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
aws help
aws <command> help
aws <command> <subcommand> help
aws: error: the following arguments are required: --aws-account-id, --namespace
[cloudshell-user@ip-10-130-58-177 ~]$
--aws-account-id
と --namespace
が必須パラメーターであることが分かりました。この二つのパラメーターも指定しましょう。
aws quicksight list-groups --aws-account-id 123456789012 --namespace default
▼実行結果
[cloudshell-user@ip-10-130-58-177 ~]$ aws quicksight list-groups --aws-account-id 123456789012 --namespace default
{
"GroupList": [
{
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group1-shared-restricted-folder",
"GroupName": "Group1-shared-restricted-folder",
"Description": "Group1-shared-restricted-folder",
"PrincipalId": "group/d-xxxxxxxxxx/dad44c5d-90ef-4e64-a334-7da864c52db0"
}
],
"Status": 200,
"RequestId": "8e1533a2-96da-4842-9c74-8289cbc27ae4"
}
[cloudshell-user@ip-10-130-58-177 ~]$
QuickSight グループ一覧が表示されました。この "Arn"
の部分が、QuickSight グループの ARN です。
制限付き共有フォルダに設定する権限の確認方法
--permissions
では Actions=
で QuickSight アクションが設定できるのですが、設定できるアクションのセットが決まっています。
QuickSight アクションには以下のドキュメントに記載のように様々なアクションがあります。
様々なアクションがありますが、制限付き共有フォルダに設定できる Actions は自由に設定できるわけではなく、特定のアクションに決まっています。ドキュメントには明確にアクションのセットは記載されていないようなのですが、Actions に指定できる権限のセットを間違えて create-folder や update-folder-permissions コマンドを実行すると、以下のようなエラーが返ってきます。
An error occurred (InvalidParameterValueException) when calling the CreateFolder operation: Permissions contain unsupported permission sets for a restricted folder. Valid sets: [quicksight:CreateFolder, quicksight:DescribeFolder, quicksight:CreateFolderMembership, quicksight:DeleteFolderMembership, quicksight:DescribeFolderPermissions] or [quicksight:DescribeFolder]
(以下、機械翻訳)
CreateFolder オペレーションの呼び出し時にエラーが発生しました(InvalidParameterValueException): アクセス許可に、制限付きフォルダのサポートされていないアクセス許可セットが含まれています。有効なセットです: 有効なセット:[quicksight:CreateFolder、quicksight:DescribeFolder、quicksight:CreateFolderMembership、quicksight:DeleteFolderMembership、quicksight:DescribeFolderPermissions] または [quicksight:DescribeFolder]。
このエラーより、権限のセットは以下であると読み取れます。
- 寄稿者(Contributor)
Actions=quicksight:CreateFolder,quicksight:DescribeFolder,quicksight:CreateFolderMembership,quicksight:DeleteFolderMembership,quicksight:DescribeFolderPermissions
- 閲覧者(Viewer。日本語ドキュメントには「表示者」と記載されています)
Actions=quicksight:DescribeFolder
制限付き共有フォルダ内にアセットを作成する
アセットの作成は QuickSight コンソールから GUI で実施できます。
通常の共有フォルダの場合は作成済みのアセットを共有フォルダ内に移動できるのですが、制限付き共有フォルダはデータセットから制限付き共有フォルダ内で作成する必要があります。
制限付き共有フォルダに入り、「新規」から「データセット」をクリックします。
今回はデータソースとして Athena を選択しました。データソース名を指定し Athena ワークグループを選択します。
ちなみにもとになるデータは以下のブログで使用した CSV データを使っています。別アカウントの S3 バケットに配置した CSV ファイルを Athena 経由でクエリして持ってきています。
制限付き共有フォルダでデータセットを作成しようとすると、以下のような注意の画面が出ます。
このまま「データセットの作成」をクリックします。
データベースとテーブルを選択し、今回は「カスタム SQL を使用」をクリックします。
カスタム SQL 名とカスタム SQL を入力し、「データの編集/プレビュー」をクリックします。
「適用」をクリックすると、カスタム SQL の結果が表示されます。結果に問題が無ければ、「保存して視覚化」をクリックして分析の作成に進みます。
「作成」をクリックします。
今回は折れ線グラフを作成しました。「公開」をクリックしてダッシュボードを作成します。
新しいダッシュボードとして公開します。ダッシュボード名を入力し、「ダッシュボードの公開」をクリックします。
ダッシュボードが作成されました。
制限付き共有フォルダに戻ると、作成したアセットが表示されています。制限付き共有フォルダへのアクセス権限があるユーザー以外はダッシュボードを閲覧できません。
参考